package com.common.file.util;

import cn.hutool.core.util.StrUtil;

/**
 * 图片 URL 工具类
 * 用于构建图片的代理访问 URL
 */
public class ImageUrlUtil {
    
    /**
     * 构建图片代理 URL
     * @param imageKey 图片在 OSS 中的 key 或已有的代理 URL
     * @return 代理 URL，如果 key 为空则返回 null
     */
    public static String buildProxyUrl(String imageKey) {
        if (StrUtil.isBlank(imageKey)) {
            return null;
        }
        
        // 如果已经是代理 URL 格式，直接返回
        if (imageKey.startsWith("/dev-api/image/proxy?key=")) {
            return imageKey;
        }
        
        // 如果是完整的 HTTP URL，提取 key 部分
        if (imageKey.startsWith("http")) {
            // 从完整 URL 中提取 key，例如：
            // https://bucket.oss-cn-hangzhou.aliyuncs.com/ojsystem/xxx.jpg
            // 提取出：ojsystem/xxx.jpg
            String key = extractKeyFromUrl(imageKey);
            if (key != null) {
                return String.format("/dev-api/image/proxy?key=%s", key);
            }
        }
        
        // 如果是 OSS key 格式（包含路径前缀），直接构建代理 URL
        // 例如：ojsystem/68e523307a6de9e368554a57.jpg
        if (imageKey.contains("/") && (imageKey.endsWith(".jpg") || imageKey.endsWith(".png") || 
            imageKey.endsWith(".jpeg") || imageKey.endsWith(".gif") || imageKey.endsWith(".webp"))) {
            return String.format("/dev-api/image/proxy?key=%s", imageKey);
        }
        
        // 其他情况，直接构建代理 URL
        return String.format("/dev-api/image/proxy?key=%s", imageKey);
    }
    
    /**
     * 从完整 OSS URL 中提取 key
     * @param url 完整的 OSS URL
     * @return OSS key 或 null
     */
    private static String extractKeyFromUrl(String url) {
        try {
            // 处理完整的 OSS URL，例如：
            // https://bucket.oss-cn-hangzhou.aliyuncs.com/ojsystem/68e523307a6de9e368554a57.jpg
            // 需要提取出：ojsystem/68e523307a6de9e368554a57.jpg
            
            // 先移除协议部分
            if (url.startsWith("https://")) {
                url = url.substring(8);
            } else if (url.startsWith("http://")) {
                url = url.substring(7);
            }
            
            // 找到第一个 / 之后的部分
            int firstSlashIndex = url.indexOf('/');
            if (firstSlashIndex != -1 && firstSlashIndex < url.length() - 1) {
                return url.substring(firstSlashIndex + 1);
            }
        } catch (Exception e) {
            // 忽略异常，返回 null
        }
        return null;
    }
}
